iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
DevOps

今天不學遺傳學,跟著Kubernetes種豌豆系列 第 19

Day19. 叢集內的網路

  • 分享至 

  • xImage
  •  

Pod Networking

kubernetes無內建方案控管叢集內部及外部的網路,需使用外部方案如:weaveworks, flannel, cilium, wmwareNSX etc.

Networking Model的需求

  • Pod需有自己的ip,需求不重疊的IP位址
    • Pod的ip由外部方案(network pulgin)分配
    • Service由kube-apiserver分配
    • Node由kubelet或cloud-control-manager分配
  • node內部的pod要能互相溝通
  • node之間的pod溝通, 不須透過NAT

設置方式,遵循CNI規則,統整於script當中,包裹於建立或刪除容器的時候:

  • container runtime查找設定檔: 取script檔名 --cni conf-dir=/etc/cni/net.d
  • container runtime獲取script --cni-bin-dir=/etc/cni/bin
  • 有各類支援CNI的執行檔: --cni-bin-dir=/opt/cni/bin
  • container runtime執行script ./net script.sh add <container> <namespace>

Container Networking Interface (CNI)

1.3或更新的版本,可以在cluster使用CNI plugin,設定鑲嵌於components的configuration

Service Networking

Pod對service的溝通,service像是虛擬的object,有自己的ip,跨越cluster範圍,建立轉導規則

  • ClusterIP: cluster內部連通pod的服務
  • NodePort: 外部request透過開在node上面的port通往node內部的pod

轉導規則的模式 kube proxy proxy mode [ userspace | iptablkes | ipvs ]
Service的ip rangekube-api-server --service-cluster-ip-range ipNet (Default: 10.0.0.0/24)

Cluster DNS

建立service後,由跨越cluster範圍的kubeDNS做紀錄,pod則是要另外啟用,其hostname來自ip變形

hostname namespace type root ip address
xxx-svc-name xxx-name svc cluster.local xxx.xxx.xx.xx
xxx-xxx-xx-xx xxx-name pod cluster.local xxx.xxx.xx.xx

DNS如何實現

統一將service的name和ip資訊存在dns server裡面,各pod只要指向該config檔案即可,1.12+版本後使用CoreDNS為DNS server,部署後自動產生service(預設名稱為kube-dns),名為nameserver指向此service,由kubelet幫忙做好這些事情

cat /etc/coredns/Corefile

  • 內含多個plugin, 主要用來除錯及監控
  • proxy: /etc/resolv.conf 設定使用kubernetes node的nameserver
  • 設定以configmap object放在kubernetes內

上一篇
Day18. 安全性就像是洋蔥一層層組成
下一篇
Day20. 趨於複雜的Service,Ingress單一入口網出場
系列文
今天不學遺傳學,跟著Kubernetes種豌豆30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言